package com.example.myapplication;

import android.app.Service;
import android.content.Intent;
import android.media.MediaPlayer;
import android.os.IBinder;
import android.util.Log;

public class MusicService extends Service {

    private MediaPlayer mediaPlayer;  // 声明 MediaPlayer 对象，用于播放音乐
    private int currentTrackResId;  // 当前播放的资源ID

    // 在服务创建时调用
    @Override
    public void onCreate() {
        super.onCreate();
        Log.d("MusicService", "Service created");  // 日志记录服务创建
        mediaPlayer = new MediaPlayer();  // 初始化 MediaPlayer 对象
    }

    // 当服务被启动时调用
    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        Log.d("MusicService", "onStartCommand called, service started");  // 日志记录服务启动
        if (intent != null && intent.hasExtra("track_res_id")) {  // 判断 Intent 是否存在并且包含歌曲资源 ID
            int resId = intent.getIntExtra("track_res_id", -1);  // 获取传递过来的资源 ID，默认为 -1
            if (resId != -1) {  // 如果资源 ID 不为 -1，则播放音乐
                playMusic(resId);  // 调用 playMusic 方法播放音乐
            }
        }
        return START_STICKY;  // 返回 START_STICKY，表示服务在被系统终止后会自动重启
    }

    // 播放指定ID的音乐
    public void playMusic(int resId) {
        Log.d("MusicService", "playMusic called, track resId: " + resId);  // 日志记录播放音乐
        if (mediaPlayer.isPlaying()) {  // 如果当前正在播放音乐
            mediaPlayer.stop();  // 停止当前播放的音乐
            mediaPlayer.reset();  // 重置 MediaPlayer，使其恢复到初始化状态
        }
        mediaPlayer = MediaPlayer.create(getApplicationContext(), resId);  // 根据资源 ID 创建新的 MediaPlayer 实例
        mediaPlayer.start();  // 开始播放音乐
        currentTrackResId = resId;  // 更新当前播放的资源 ID
    }

    // 暂停音乐播放
    public void pauseMusic() {
        if (mediaPlayer.isPlaying()) {  // 如果音乐正在播放
            mediaPlayer.pause();  // 暂停播放
            Log.d("MusicService", "Music paused");
        }
    }

    // 停止音乐播放
    public void stopMusic() {
        if (mediaPlayer.isPlaying()) {  // 如果音乐正在播放
            mediaPlayer.stop();  // 停止播放
            mediaPlayer.reset();  // 重置 MediaPlayer
            Log.d("MusicService", "Music stopped");
        }
    }

    // 检查音乐是否正在播放
    public boolean isPlaying() {
        return mediaPlayer.isPlaying();  // 返回 MediaPlayer 的播放状态
    }

    // 服务销毁时调用，释放资源
    @Override
    public void onDestroy() {
        super.onDestroy();
        Log.d("MusicService", "Service destroyed");  // 日志记录服务销毁
        if (mediaPlayer != null) {  // 如果 MediaPlayer 不为空
            mediaPlayer.release();  // 释放 MediaPlayer 占用的资源
        }
    }

    // 因为这是对普通启动方式进行实验，所以不需调用，直接返回null
    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }
}
